package com.twq.collection.list.highorder

/**
 * Created by tangweiqun on 2017/12/10.
 */
object First {
  def main(args: Array[String]): Unit = {
    //Mapping over lists: map, flatMap and foreach

    //1、map：对一个List[T]的每一个元素应用函数 T => U，返回一个新的List[U]
    List(1, 2, 3) map (_ + 1) //接受的函数是：(x: Int) => x + 1

    val words = List("the", "quick", "brown", "fox")
    words map (_.length) //接受的函数：(str: String) => str.length
    words map (_.toList.reverse.mkString) //接受的函数：(str: String) => str.toList.reverse.mkString

    //2、flatMap：对一个List[T]的每一个元素应用函数 T => List[U]，返回一个每一个元素应用函数的结果的拼接List[U]
    words map (_.toList) // returns a list of lists
    words flatMap (_.toList) //返回一个list，其中的元素是所有list的拼接后的元素

    //3、foreach：对一个List[T]的每一个元素应用函数 T => U，但是不返回任何东西，即返回是Unit
    var sum = 0
    List(1, 2, 3, 4, 5) foreach (sum += _) //接受一个(x: Int) => sum += x的闭包
  }
}
